package global

import (
	"hy_808/protocol/jtt808"
	"hy_808/tcpx"
	"sync"
)

// 配置
type ConfigTpl struct {
	HttpPort     int `yaml:"HttpPort"`
	HYSocketData struct {
		Addr string `yaml:"Addr"`
	} `yaml:"HYSocketData"`
	UpPlatform struct {
		Addr string `yaml:"Addr"`
	} `yaml:"UpPlatform"`
	DeviceInfo struct {
		Color      byte   `yaml:"Color"` //按照 JT/T 415-2006 的 5.4.12 0.未上车牌 1.蓝色 2.黄色 3.黑色 4.白色 9.其他
		Model      string `yaml:"Model"`
		ProducerId string `yaml:"ProducerId"` //生产厂商ID
		ProvinceId uint16 `yaml:"ProvinceId"` //省份
		CityId     uint16 `yaml:"CityId"`     //城市
	} `yaml:"DeviceInfo"`
	Database struct {
		Present string `yaml:"Present"`
		Mssql   struct {
			Host     string `yaml:"Host"`
			Database string `yaml:"Database"`
			Port     int    `yaml:"Port"`
			User     string `yaml:"User"`
			Password string `yaml:"Password"`
		} `yaml:"Mssql"`
	} `yaml:"Database"`
}

type OnReceive808 interface {
	OnReceive(c *tcpx.Conn, p jtt808.Jtt808) bool
}

type DeviceClient struct {
	BusNo        uint32 //车号
	ProvinceId   uint16 //省份编码  37山东
	CityId       uint16 //城市编码 0102 济南
	Phone        string
	DeviceId     string     //终端ID
	DeviceModel  string     //终端型号
	ProducerId   string     //制造商
	Color        byte       //颜色  1蓝色;5蓝绿
	Card         string     //车牌号
	DeviceSN     int        //流水号
	AuthCode     string     //鉴权码
	JoinHYConn   *tcpx.Conn //连接恒宇通讯得客户端连接
	Join808Conn  *tcpx.Conn //连接808协议平台得客户端连接
	Client808Ser OnReceive808
	Online       bool
	SignIn       bool   //鉴权通过 已登录808平台
	TokenCode    string //鉴权码
}

// 缓存808平台相关数据 设备保存到数据库里面的信息
type DeviceDBData struct {
	DeviceNo   int    //车号
	LineNO     int    //线路号
	ProvinceId uint16 //省份ID
	CityId     uint16 //城市ID
	DeviceId   string //终端号 终端ID(每个设备不同)
	Phone      string //手机号
	PlateNo    string //车牌号
	ProducerId string //生产商ID
	Color      byte   //车牌颜色，按照 JT/T 415-2006 的 5.4.12 0.未上车牌 1.蓝色 2.黄色 3.黑色 4.白色 9.其他
	TokenCode  string //鉴权码
	Model      string //终端型号
}

var DeviceDBDataMap sync.Map //key:phone value:global.DeviceDBData
var HY808Conn *tcpx.Conn

var SqlliteFile string //sqllite得data.dll文件路径
